#ifndef COURSE_H
#define COURSE_H

#include <QString>
#include "enums.h"

class Course
{
public:
    Course();
    Course(int id, QString name, CourseAttribute sx, CourseNature xz, double xf, int xs, QString time);
    Course(int id, QString name, QString sx, QString xz, double xf, int xs, QString time);
    ~Course();

    CourseAttribute convertToCourseAttribute(QString sx);   // 转换课程属性
    QString convertToString(CourseAttribute sx);           // 转换为字符串
    CourseNature convertToCourseNature(QString xz);         // 转换课程性质
    QString convertToString(CourseNature xz);              // 转换为字符串

    void setId(int id);                // 设置课程编号
    void setName(QString name);        // 设置课程名称
    void setSX(CourseAttribute sx);    // 设置课程属性
    void setSX(QString sx);            // 设置课程属性
    void setXZ(CourseNature xz);       // 设置课程性质
    void setXZ(QString xz);            // 设置课程性质
    void setXF(double xf);             // 设置课程学分
    void setXS(int xs);                // 设置课程学时
    void setTime(QString time);        // 设置课程开设时间

    int getId();              // 得到课程编号
    QString getName();        // 得到课程名称
    CourseAttribute getSX();  // 得到课程属性
    QString getSX_str();      // 得到课程属性
    CourseNature getXZ();     // 得到课程性质
    QString getXZ_str();      // 得到课程性质
    double getXF();           // 得到课程学分
    int getXS();              // 得到课程学时
    QString getTime();        // 得到课程开设时间

    QString toString();       // 转换为字符串
    bool loadCourse(const int id, const QString& str); // 加载课程

private:
    int             m_id;      // 课程编号
    QString         m_name;    // 课程名称
    CourseAttribute m_sx;      // 课程属性
    CourseNature    m_xz;      // 课程性质
    double          m_xf;      // 课程学分
    int             m_xs;      // 课程学时
    QString         m_time;    // 课程开设时间
};

#endif // COURSE_H
